/**
 * 小程序开发脚本
 * 用于开发环境构建和实时编译
 */

const path = require('path');
const webpack = require('webpack');
const { merge } = require('webpack-merge');
const chalk = require('chalk');
const baseConfig = require('../config/webpack.config');

// 合并配置
const devConfig = merge(baseConfig, {
  // 设置为开发模式
  mode: 'development',
  
  // 生成source map
  devtool: 'source-map',
  
  // 开发环境插件
  plugins: [
    // 定义环境变量
    new webpack.DefinePlugin({
      'process.env.NODE_ENV': JSON.stringify('development')
    }),
    
    // 热更新插件
    new webpack.HotModuleReplacementPlugin(),
  ],
  
  // 开发环境优化
  optimization: {
    minimize: false,
  },
  
  // 监听文件变化
  watch: true,
  
  // 监听选项
  watchOptions: {
    // 忽略node_modules
    ignored: /node_modules/,
    // 设置轮询间隔
    poll: 1000,
    // 设置聚合时间
    aggregateTimeout: 300,
  },
});

// 执行构建
console.log(chalk.blue('🚀 启动开发服务器...\n'));
console.log(chalk.yellow('正在监听文件变化...\n'));

const compiler = webpack(devConfig);

let firstCompile = true;

compiler.watch(devConfig.watchOptions, (err, stats) => {
  if (err) {
    console.error(chalk.red('❌ 编译失败:'), err);
    return;
  }
  
  // 输出统计信息
  console.log(stats.toString({
    colors: true,
    modules: false,
    children: false,
    chunks: false,
    chunkModules: false
  }));
  
  if (stats.hasErrors()) {
    console.log(chalk.red('\n❌ 编译过程中出现错误，请检查上方日志\n'));
    return;
  }
  
  if (firstCompile) {
    console.log(chalk.green('\n✅ 首次编译完成!'));
    console.log(chalk.cyan('📱 请使用微信开发者工具打开项目\n'));
    firstCompile = false;
  } else {
    const time = new Date().toLocaleTimeString();
    console.log(chalk.green(`\n✅ 重新编译完成! [${time}]`));
  }
  
  console.log(chalk.yellow('👀 正在监听文件变化...\n'));
}); 